חיפשתי הסברים אך לא מצאתי הסבר מדויק או הסבר טוב ...
ואיך היא בא לידי ביטוי בקוד פה :
foreach($items as $item => $rules){
foreach($rules as $rule => $rule_value){
$value = $source[$item];
if($rule === "required" && empty($value)){
self::addError("$item is required");
}else if(!empty($value)){
switch($rule){
case "min":
if(strlen($value) < $rule_value){
self::addError("$item must at least of $rule_value characters.");
}
break;
case "max":
if(strlen($value) > $rule_value){
self::addError("$item must less then $rule_value characters.");
}
break;
case "matches":
if($value != $source[$rule_value]){
self::addError("$rule_value must match $item");
}
break;
}
}
}
}
if(empty(self::$_errors)){
$this->_passed = true;
}
return $this;
}
אשמח להסבר , תודה !
10 תשובות
$this בעצם היא "משתנה המחלקה".
בתוך משתנה זה ניתן לגשת לכל פונקציה ומשתנה של המחלקה מתוך המחלקה עצמה, כאשר אנחנו עושים return $this; אז אנחנו מחזירים בעצם את המשתנה המכיל את כל המחלקה, למשל שים לב לזה:
class a{
public $b = 5;
public function a(){
$this->b = $this->b + 1;
return $this;
}
}
$a = new a();
$b = $a->a();
echo $b->b;
?>
כאשר אנחנו מחזירים THIS אנחנו נותנים למשתנה שאליו הכנסו את THIS את הגישה לכל המחלקה בעצם, הבנת?
אז למשתנה אנחנו מחזירים את כל המשתנים של המחלקה ? ( ממממ... טיפה מסובך ... יש לך הסבר מפורט יותר ? )
תודה !
בוא נקרא לזה מפתח.
נניח ויש לך בית מסוים שמכיל בתוכו כל מיני חפצים, אם יש לנו את המפתח נוכל לפתוח את הדלת ולהכנס לתוך ובית וכמובן להשתמש בחפצים נכון?
אז $this הוא בעצם מפתח לכל המחלקה, אך הוא פועל אך ורק בתוך המחלקה. כלומר שתוכל לקורא למפתח של הבית בשביל חפץ מסוים רק אם הקריאה היא מתוך הבית, מובן?
כאשר אנחנו עושים return למפתח אנחנו נותנים את האפשרות להשתמש במפתח מחוץ למחלקה.
הבנת או שאצטרך להסביר אחרת?
אובייקט, לא מחלקה. זה חשוב מאוד. מדובר במצב המסוים של המחלקה - האובייקט המדובר.
אוקי , zacharya הבנתי ....
אך יש לי עוד שאלה , בהסבר שלך הסברת על $this כאשר הוא ניגש למשתנה לדוגמה :
שאת זה הבנתי הסבר מצוין דרך אגב !
אך מה קורה כאשר ה $this לא פונה לאף משתנה ? , כמו בדוגמה בתגובתי הראשונה :
תודה !
אכן. :)
מצב של מחלקה, מופע של מחלקה, איך שלא תקרא לזה.
חשוב לציין שזה לא מעתיק את האובייקט, אלא מחזיר מצביע (Reference) לאובייקט. אני אערוך עוד מעט עם דוגמה.
הנה דוגמה, אני מקווה שהיא מספיק טובה:
private $counter = 0;
public function increment() {
$this->counter++;
return $this;
}
public function getCount() {
return $this->counter;
}
}
$counter = new Counter();
$anotherCounter = $counter->increment();
echo "counter: " . $counter->getCount() . "\n";
echo "anotherCounter: " . $anotherCounter->getCount() . "\n\n";
$anotherCounter->increment();
echo "counter: " . $counter->getCount() . "\n";
echo "anotherCounter: " . $anotherCounter->getCount() . "\n";
כאן אתה יכול לראות את זה פועל.